今天要介紹的是Dagger2,這是一個非常實用的套件,現在不管是什麼的專案一定都會用到。而Dagger2的好處有很多,它能讓程式碼非常的簡潔,最重要的是讓往後在維護上能夠更輕鬆更好理解內容。接下來就來看看Dagger2要使用到的工具!!
使用Dagger2可以簡化編寫的程式碼和不用每次要用時都要new出來,所以每次執行時都會耗費過多記憶體。
在沒有使用前我們要使用其他class的方法時都要使用new。
Student student = new student();
@Inject
Student2 student2;
一樣的要先去build.gradle:
implementation 'com.google.dagger:dagger:2.16'
annotationProcessor 'com.google.dagger:dagger-compiler:2.16'
這裡是你所要提供依賴的Class,而這裡要提供Name。
public class Student {
private String name;
//你所要提供的function。
@Inject
public Student(String name){
this.name=name;
}
//get方法
public String getName(){
return name;
}
//set方法
public void setName(String name){
this.name=name;
}
}
這裡是讓你的Module和你要注入的地方可以溝通,像是橋樑一樣。
//你這個頁面所需的主件(Module)
@Component(modules = Module.class)
public interface Component {
//你所要注入的地方
void inject(MainActivity MainActivity);
}
提供需要依賴的對象實例化。
@Module
public class Module {
private String name;
//建構值
public Module(String name){
this.name=name;
}
//你所要提供的依賴,通常會在前面加上provides。
@Provides
Student2 providesStudent2(){
return new Student2(name);
}
}
下面這行是當你其他的東西建立完後,從新bulid過專案就會自動生成
//-----------------------你所要使用的Module和他的建構值------注入到這個頁面(this)
DaggerComponent.builder().Module(new Module("Lee")).build().inject(this);
public class MainActivity extends AppCompatActivity {
//注入要使用的依賴
@Inject
Student student;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//綁定元件
TextView tv=(TextView) findViewById(R.id.textView);
//建立DaggerComponent
DaggerComponent.builder().Module(new Module("Lee")).build().inject(this);
//呼叫getName方法拿取資料
tv.setText(student.getName());
}
}